package com.andrew.util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * JDBC工具类可以获取链接池，数据库连接，与释放资源
 * 
 * @author zwq
 *
 */

public class JDBCUtils {
	private static DataSource dataSource =null;
	
	static {
		dataSource =new ComboPooledDataSource();
	}
	
	
	/**
	 * 获取连接池
	 * @return 数据库连接池
	 */
	public static DataSource getDataSource() {
		return dataSource;
	}
	

	/**
	 * 获取数据库连接对象
	 * @return 数据库连接对象
	 * @throws SQLException 
	 */
	public static Connection getConn() throws SQLException{
		return dataSource.getConnection();
	}
	
	/**
	 * 释放资源
	 * @param 数据库连接
	 * @param 语句执行平台
	 * @param 结果集
	 */
	public static void release(Connection conn , Statement st , ResultSet rs){
		closeRs(rs);
		closeSt(st);
		closeConn(conn);
	}
	/**
	 * 释放资源
	 * @param 数据库连接对象
	 * @param 结果集
	 */
	public static void release(Connection conn , ResultSet rs){
		closeRs(rs);
		closeConn(conn);
	}
	
	/**
	 * 释放资源
	 * @param 数据库连接对象
	 */
	public static void release(Connection conn){
		closeConn(conn);
	}
	
	/**
	 * 释放资源
	 * @param 结果集
	 */
	public static void release( ResultSet rs){
		closeRs(rs);
	}
	/**
	 * 释放资源
	 * @param 数据库连接
	 * @param 语句执行平台
	 */
	public static void release(Connection conn , Statement st){
		closeSt(st);
		closeConn(conn);
	}

	/**
	 * 关闭结果集
	 * @param 结果集
	 */
	private static void closeRs(ResultSet rs){
		try {
			if(rs != null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			rs = null;
		}
	}
	
	/**
	 * 关闭语句执行平台
	 * @param 语句执行平台
	 */
	private static void closeSt(Statement st){
		try {
			if(st != null){
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			st = null;
		}
	}
	
	/**
	 * 关闭数据库连接
	 * @param 数据库连接
	 */
	private static void closeConn(Connection conn){
		try {
			if(conn != null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			conn = null;
		}
	}
	
}




